package com.powergisol.gis.service;

import com.powergisol.gis.entity.FileDocument;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;
import java.util.List;
import java.util.Optional;

public interface IFileService {
    /**
     * 保存tif\shp以外文件
     * @param file 文件
     * @param uuid 服务uuid
     * @param serviceName 服务名称
     * @param path 服务路径
     * @param i 标识，记录存储数量，用于计算存储速度
     */
    void saveDb(List<File> file, String uuid, String serviceName, String path,int i);


    String importFilesToFs(InputStream in, String name, String suffix, String serviceName);

    String importFilesToFs(File file, String name, String suffix, String serviceName);

    String importFilesToFs(File file, String name, String suffix);
    /**
     * 保存文件 - 表单
     * @param md5
     * @param file
     * @return
     */
    FileDocument saveFile(String md5, MultipartFile file, String uniqFlag, String serviceName);

    /**
     * 删除文件
     * @param id
     * @param isDeleteFile 是否删除文件
     * @return
     */
    void removeFile(String id, boolean isDeleteFile);

    /**
     * 根据id获取文件
     * @param id
     * @return
     */
    Optional<FileDocument> getById(String id);

    /**
     * 根据md5获取文件对象
     * @param md5
     * @return
     */
    FileDocument getByMd5(String md5);

    /**
     * 根据name获取文件对象
     * @param name
     * @return
     */
    Optional<FileDocument> getByName(String name);

    /**
     * 根据serviceName获取文件对象
     * @param serviceName
     * @return
     */
    List<FileDocument> getByServiceName(String serviceName);

    File getFileByCondition(String serivceName, String suffixName, String url);

    /**
     * 分页查询，按上传时间降序
     * @param pageIndex
     * @param pageSize
     * @return
     */
    List<FileDocument> listFilesByPage(int pageIndex, int pageSize);

    void delByUuid(String uuid);

    boolean upByMD5(String uuid,String key,String object);

    void writeToDisk(String uuid,String path);
}
